package day07;

import java.util.ArrayList;

/**
 * 输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字，例如，如果输入如下矩阵： 1 2 3 4 5 6 7 8 9 10 11 12 13 14
 * 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
 * 
 * @author Administrator
 *
 */
public class Test01 {
	public static void main(String[] args) {
		int[][] arr = new int[][] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
		printMatrix(arr);
	}

	public static ArrayList<Integer> printMatrix(int[][] arr) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		int h = arr.length;
		int w = arr[0].length;
		// 二維二维数组的总长度
		int count = h * w;
		int x1 = 0; // 控制左上方的范围
		int x2 = h - 1; // 控制左下方的范围
		int y1 = 0; // 控制右上方的范围
		int y2 = w - 1; // 控制右下方的范围

		// 数组的真实坐标
		int i = 0;
		int j = 0;
		String line = "";
		while (count != 0) {
			// 向右
			while (count != 0) {
				list.add(arr[i][j]);
				count--;
				if (j == y2) {
					break;
				}
				j++;
			}
			x1++;

			// 向下
			i++;
			while (count != 0) {
				list.add(arr[i][j]);
				count--;
				if (i == x2) {
					break;
				}
				i++;
			}
			y2--;

			// 向左
			j--;
			while (count != 0) {
				list.add(arr[i][j]);
				count--;
				if (j == y1) {
					break;
				}
				j--;
			}
			x2--;

			// 向上
			i--;
			while (count != 0) {
				list.add(arr[i][j]);
				count--;
				if (i == x1) {
					break;
				}
				i--;
			}
			j++;
			y1++;
		}
		return list;
	}
}
